Java Technologies Generated Mapping কোড দেখা এবং Verify করা গাইড ও নোট

311

MapStruct একটি annotation processor ভিত্তিক Java লাইব্রেরি, যা ডোমেইন অবজেক্ট এবং ডেটা ট্রান্সফার অবজেক্ট (DTO) এর মধ্যে ম্যাপিং কোড অটোমেটিকভাবে জেনারেট করে। MapStruct compile-time এ কোড জেনারেট করে, এবং এর ফলে আপনি runtime reflection এর উপর নির্ভর না করে দ্রুত পারফরম্যান্স পেতে পারেন। তবে, মাঝে মাঝে আপনাকে Generated Mapping কোড দেখতে এবং যাচাই (verify) করতে হতে পারে, যাতে ম্যাপিং সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা যায়।

এখানে, আমরা MapStruct এর মাধ্যমে জেনারেট হওয়া কোড দেখতে এবং যাচাই করার পদ্ধতি সম্পর্কে আলোচনা করব।


১. MapStruct Generated Mapping কোড

MapStruct compile-time এ ম্যাপিং কোড জেনারেট করে, যা সাধারণত target/generated-sources/annotations ডিরেক্টরিতে সঞ্চিত হয়। MapStruct কোনো runtime reflection ব্যবহার না করে, বরং একটি implementation ক্লাস তৈরি করে যা মূল Mapper Interface এর বাস্তবায়ন হিসেবে কাজ করে।

উদাহরণ:

ধরা যাক, আপনার Person এবং PersonDTO ক্লাস দুটি আছে এবং আপনি এগুলির মধ্যে ম্যাপিং করতে চান।

Person.java (Domain Object):

public class Person {
    private String name;
    private int age;

    // Getters and Setters
}

PersonDTO.java (DTO):

public class PersonDTO {
    private String name;
    private int age;

    // Getters and Setters
}

PersonMapper.java (Mapper Interface):

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

@Mapper
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);

    PersonDTO personToPersonDTO(Person person);
}

এখানে, PersonMapper ইন্টারফেসের মাধ্যমে Person থেকে PersonDTO তে ম্যাপিং করা হচ্ছে।

Generated Code:

এখন, MapStruct এই ম্যাপিং ইন্টারফেসটির জন্য কোড জেনারেট করবে। এটি সাধারণত একটি PersonMapperImpl ক্লাস তৈরি করবে যা Person থেকে PersonDTO তে ম্যাপিং করার জন্য বাস্তবায়ন সরবরাহ করবে।

এই generated code দেখতে, আপনার Maven বা Gradle প্রকল্পে target/generated-sources/annotations ফোল্ডারটি চেক করুন।

public class PersonMapperImpl implements PersonMapper {
    @Override
    public PersonDTO personToPersonDTO(Person person) {
        if ( person == null ) {
            return null;
        }

        PersonDTO personDTO = new PersonDTO();
        personDTO.setName( person.getName() );
        personDTO.setAge( person.getAge() );

        return personDTO;
    }
}

এখানে, PersonMapperImpl ক্লাসটি personToPersonDTO মেথডের বাস্তবায়ন প্রদান করেছে, যা Person অবজেক্ট থেকে PersonDTO তে ম্যাপিং করবে।


২. Generated Mapping কোড Verify করা

MapStruct কোড জেনারেট করার পরে, আপনাকে নিশ্চিত করতে হবে যে জেনারেটেড কোড সঠিকভাবে কাজ করছে। এটি unit testing এর মাধ্যমে করা যায়।

২.১ JUnit টেস্ট ব্যবহার করে Verify করা

আপনি JUnit টেস্ট কেস ব্যবহার করে MapStruct এর জেনারেটেড কোডের কার্যকারিতা যাচাই করতে পারেন।

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class PersonMapperTest {

    @Test
    public void testPersonToPersonDTO() {
        // Given
        Person person = new Person();
        person.setName("John");
        person.setAge(30);

        // When
        PersonDTO personDTO = PersonMapper.INSTANCE.personToPersonDTO(person);

        // Then
        assertEquals("John", personDTO.getName());
        assertEquals(30, personDTO.getAge());
    }
}

এখানে, testPersonToPersonDTO() টেস্ট মেথডটি নিশ্চিত করবে যে Person থেকে PersonDTO তে ম্যাপিং সঠিকভাবে হচ্ছে কিনা।


৩. IDE তে Generated Code দেখা

IntelliJ IDEA:

  1. IntelliJ IDEA তে, আপনার Project ভিউতে target/generated-sources/annotations ফোল্ডারটি অনুসন্ধান করুন।
  2. সেখানে আপনি MapStruct এর মাধ্যমে জেনারেট হওয়া কোড পাবেন। সাধারণত, এই কোডটি generated-sources ফোল্ডারে থাকে।

Eclipse:

  1. Eclipse তে, target/generated-sources/annotations ফোল্ডারটি দেখুন।
  2. Eclipse IDE তে Generated Sources সঠিকভাবে দেখানোর জন্য প্রকল্পটি রিফ্রেশ করুন।

এখানে PersonMapperImpl ক্লাসটি পাবেন, যা MapStruct এর মাধ্যমে জেনারেট করা হয়।


৪. Generated Mapping কোড Debugging এবং সমস্যা চিহ্নিতকরণ

যদি আপনি জেনারেটেড কোডে কোনো সমস্যা পান, তবে নীচের বিষয়গুলো যাচাই করতে পারেন:

  1. MapStruct Version: MapStruct এর ভার্সন আপডেট করুন। কখনও কখনও পুরনো ভার্সনে কিছু ফিচার কাজ নাও করতে পারে।
  2. Annotation Processor: annotationProcessorPaths সঠিকভাবে কনফিগার হয়েছে কিনা তা যাচাই করুন।
  3. Code Generation Logs: বিল্ড প্রক্রিয়া চলাকালে লগে কোড জেনারেশন সম্পর্কিত ত্রুটি বা সতর্কতা দেখুন।
  4. Mappings: যদি কোনো মডেল ফিল্ডের জন্য ম্যাপিং না থাকে, তবে MapStruct ত্রুটি প্রদর্শন করবে। সেগুলিকে সঠিকভাবে চিহ্নিত করুন।

৫. MapStruct Generated Mapping কোডের ফিচার

  1. Field Mapping: Field-level Mapping এর মাধ্যমে ডেটা কপি করা হয়।
  2. Constructor Mapping: MapStruct কনস্ট্রাক্টর ম্যাপিং সমর্থন করে, যা কনস্ট্রাক্টর ইনজেকশন (dependency injection) এর জন্য উপকারী।
  3. Null Checks: MapStruct স্বয়ংক্রিয়ভাবে null চেক করে, যার ফলে NullPointerException এড়ানো যায়।
  4. Complex Mappings: MapStruct কাস্টম কনভার্টার ব্যবহার করে জটিল ম্যাপিংগুলো সহজে সম্পন্ন করতে সক্ষম।

সারাংশ

MapStruct একটি শক্তিশালী টুল যা compile-time এ কোড জেনারেট করে, যাতে পারফরম্যান্সে উন্নতি হয়। Generated Mapping Code দেখতে এবং যাচাই (verify) করতে হলে আপনি target/generated-sources/annotations ফোল্ডারটি ব্যবহার করতে পারেন। JUnit টেস্ট কেস ব্যবহার করে এই কোডের কার্যকারিতা নিশ্চিত করা যায়, এবং এটি আপনার মডেল ম্যাপিংকে নির্ভরযোগ্য এবং সঠিকভাবে কাজ করতে সহায়তা করে।

এছাড়া, MapStruct এর জেনারেটেড কোডের মাধ্যমে nested objects, collections, এবং custom type conversions সহজেই করা সম্ভব, যা আপনি আপনার প্রোজেক্টে সঠিকভাবে প্রয়োগ করতে পারেন।


Content added By
Promotion

Are you sure to start over?

Loading...